package com.doit.day02

import org.apache.kafka.clients.consumer.{ConsumerConfig, KafkaConsumer}
import org.apache.kafka.common.serialization.StringDeserializer
import redis.clients.jedis.Jedis

import java.sql.{Connection, DriverManager}
import java.util.Properties
import scala.math.pow

/**
 * 本质上就是一段代码逻辑的封装  便于后续的复用
 * 方法里面最重要的东西有哪些：
 * 方法的参数
 * 方法的返回值类型
 * 方法名
 * 方法体
 */
object _03_方法 {
  def main(args: Array[String]): Unit = {

//    checkNum(10)
//    waterFlower()

  }


  //两数相加
  //  def ==》 方法声明的标志
  //  main ==》方法名
  //  args: Array[String]==》 方法的参数列表
  //  Unit==>方法的返回值类型
  //  {} ==> 方法体
  def add(a: Int, b: Int): Unit = {
    println(a + b) //方法体中最后一行代码代表的就是返回值
  }

  //给你三个数，求三个数的最大值
  def getMax(a: Int, b: Int, c: Int): Int = {
    var max = a
    if (max < b) max = b
    if (max < c) max = c
    max
  }

  //在定义方法的时候，有几个注意点
  /*
  1.定义方法的时候，方法体中最后一行代码代表返回值，可以不写return 当然写了也不会报错
  2.方法的返回值类型可以不写，会根据最后一行自动推断
  3.如果你手贱，最后一行写了return ，那么你得方法返回值类型就必须写
   */

  //方法的调用
  /*
     如果 你的方法定义在本object中，直接方法名，传参数就可以了
     如果 方法定义在其他的object类中，用类名.方法名调用
     如果方法定义在class类中，那么需要new class 对象，拿着对象调用方法  java一样
   */

  //定义一个方法：穿进去int类型的一个值，这个值的范围是1-9，如果不是1-9，就打印，上课不好好听
  //如果在1-9的范围内，给的几，就打印99乘法表中到几
  def checkNum(num: Int) = {
    if (num >= 1 && num <= 9){
      for(i <- 1 to num){
        for(j <- 1 to i){
          print(s"$i * $j = ${i*j}\t")
        }
        println()
      }
    }else{
      println("上课不好好听")
    }
  }


  //第二个方法,定义一个方法：找出所有三位数的水仙花数
  def waterFlower()={
    for(elem <- 100 to 999){
      val ge = elem % 10
      val shi: Int = elem / 10 % 10
      val bai: Int = elem / 100 % 10
      if((pow(ge,3)+pow(shi,3)+pow(bai,3)).toInt == elem){
        println(elem)
      }
    }
  }

  //第三个方法   定义一个方法，调用的时候可以穿进去主机名，库名，账号，密码，调用方法得到mysql的conn对象
  def getMysql(host:String,database:String,root:String,password:String)={
    val url = s"jdbc:mysql://${host}:3306/$database"
    DriverManager.getConnection(url, root, password)
  }

  //第四个方法   获取kafka消费者的连接对象
  def getKafkaConsumer(host:String,group_id:String)={
    val props: Properties = new Properties()
    props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,host)
    props.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringDeserializer")
    props.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringDeserializer")
    props.setProperty(ConsumerConfig.GROUP_ID_CONFIG,group_id)
    new KafkaConsumer[String,String](props)
  }

  //第五个，获取redis的连接对象，传进去主机名和端口号
  def getRedis(host:String,port:Int)={
    new Jedis(host,port)
  }


}
